# -*-coding:utf-8 -*-
#!/usr/bin/env python
#function: 0-9标准字符识别——基于汉明距离
#input:字符提取结果（png图像）
#output:识别出的匹配数字

import cv2
import numpy as np
import os


# 法一、差值模板匹配 (输入两张图片，变换成相同大小后作差求和，输出总差值）
def template_match(image1,image2): 
    image1 = cv2.resize(image1,(8,8))
    image2 = cv2.resize(image2,(8,8))  
    gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY) 
    gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY) 
    diff = abs(np.array(gray1-gray2))
    sumdiff = sum(sum(diff))
    return sumdiff


#字符识别(输入待识别字符png和匹配库路径）
def char_rec(img,libpath, detail=0):
    #读取库文件
    libchar_list = os.listdir(libpath)
    
    #计算待匹配图像与库文件的不相似度
    distance=[]    
    for path in libchar_list:
        libchar = cv2.imread(libpath+'\\'+path)
        dist = template_match(img,libchar)      #计算输入字符和各模板差值
        distance.append(dist)

    #归一化处理    
    similars = 1 - np.array(distance)/max(distance)
    similars = similars.tolist()   

    if detail==1:
        print('---------characters recognition:-----------\n')
        print('relative similarity:')

        for i in range(10):
            print(i, ': %.2f    '%similars[i], end='')
        print('M', ': %.2f    '%similars[10], end='')
    
   #计算打印最相似结果作为匹配结果   
    res=similars.index(max(similars))

        
    if detail==1:
        if res!=10:
            print('\n**result: %d\n'%res)
        else:
            print('\n**result: %s\n'%'M')
    return res
